home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / TBEXPERT.PAK / TBEXPERT.H < prev    next >
C/C++ Source or Header  |  1997-05-06  |  9KB  |  416 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // Copyright (c) 1995, 1995 by Borland International, All Rights Reserved
  4. //
  5. // Filename:    TBExpert.h
  6. //
  7. // Date:        27-Sep-95
  8. //
  9. // Description:
  10. //----------------------------------------------------------------------------
  11. #if !defined(TBExpert_H)
  12. #define TBExpert_H
  13.  
  14. #if !defined(OWL_LAYOUTWI_H)
  15. # include <owl/layoutwi.h>
  16. #endif
  17. #if !defined(OWL_LISTWIND_H)
  18. # include <owl/listwind.h>
  19. #endif
  20. #if !defined(OWL_IMAGELST_H)
  21. # include <owl/imagelst.h>
  22. #endif
  23. #if !defined(OWL_GADGETWI_H)
  24. # include <owl/gadgetwi.h>
  25. #endif
  26. #if !defined(OWL_TIMEGADG_H)
  27. # include <owl/timegadg.h>
  28. #endif
  29. #if !defined(OWL_MODEGAD_H)
  30. # include <owl/modegad.h>
  31. #endif
  32. #if !defined(OWL_BUTTONGA_H)
  33. # include <owl/buttonga.h>
  34. #endif
  35. #if !defined(OWL_TEXTGADG_H)
  36. # include <owl/textgadg.h>
  37. #endif
  38. #include <fstream.h>
  39. #include <dir.h>
  40.  
  41. #include "TBExpert.rh"
  42.  
  43. class TTBExpertWindow;
  44. class TGadgetFactory;
  45.  
  46.  
  47. //
  48. // class TBExpertApplication
  49. // ~~~~~ ~~~~~~~~~~~~~~~~~~
  50. class TTBExpertApp : public TApplication {
  51.   public:
  52.     TTBExpertApp();
  53.    ~TTBExpertApp();
  54.     void InitMainWindow();
  55.  
  56.   private:
  57.     void GenerateDefines(ofstream&);
  58.     void GenerateDeclarations(ofstream&);
  59.     void GenerateCode(ofstream&);
  60. };
  61.  
  62.  
  63. //
  64. // class TStatusManager
  65. // ~~~~~ ~~~~~~~~~~~~~~
  66. class TStatusManager : public TLayoutWindow {
  67.   public:
  68.     enum TStatus {
  69.       BeforeDrag,
  70.       BeginDrag,
  71.       Dragging,
  72.       EndDrag,
  73.       ModifyGadget,
  74.     };
  75.  
  76.     TStatusManager(TWindow* parent);
  77.    ~TStatusManager();
  78.  
  79.     void SetupWindow();
  80.     bool EvEraseBkgnd(HDC);
  81.  
  82.     void SetDragStatus(TStatus status, int factoryIndex = 0);
  83.  
  84.   private:
  85.     void ModifyGadgetFactory(int factoryIndex);
  86.     void SetLayoutMetrics();
  87.     void SetBeforeDrag();
  88.     void SetBeginDrag();
  89.     void SetDragging();
  90.     void SetEndDrag();
  91.  
  92.     TWindow* Window;
  93.     TStatus  Status;
  94.     TStatus  PrevStatus;
  95.     TTBExpertWindow* TBExpertWindow;
  96.  
  97.   DECLARE_RESPONSE_TABLE(TStatusManager);
  98. };
  99.  
  100.  
  101. //
  102. // class TDynamicButtonGadget
  103. // ~~~~~ ~~~~~~~~~~~~~~~~~~~~
  104. class TDynamicButtonGadget : public TButtonGadget {
  105.   public:
  106.     TDynamicButtonGadget(const char* pathToDib,
  107.                          int    id,
  108.                          TType  type = Command,
  109.                          bool   enabled = false, // initial state before cmd enabling
  110.                          TState state = Up,
  111.                          bool   sharedGlyph = false);
  112.    ~TDynamicButtonGadget();
  113.     TDib* GetGlyphDib();
  114.  
  115.   private:
  116.     char* PathToDib;
  117. };
  118.  
  119.  
  120. //
  121. // class TGadgetManager
  122. // ~~~~~ ~~~~~~~~~~~~~~
  123. class TGadgetManager : public TGadgetWindow {
  124.   public:
  125.     TGadgetManager(TWindow*        parent = 0,
  126.                    TTileDirection  direction = Horizontal,
  127.                    TFont*          font = new TGadgetWindowFont,
  128.                    TModule*        module = 0);
  129.    ~TGadgetManager();
  130.  
  131.     void SetupWindow();
  132.  
  133.   private:
  134.     TGadget*        LastGadget;
  135.     TStatusManager* StatusManager;
  136.  
  137.     void EvKillFocus(THandle hWndGetFocus);
  138.     void EvLButtonDown(uint modKeys, TPoint& point);
  139.     void EvMouseMove(uint modKeys, TPoint& point);
  140.  
  141.   DECLARE_RESPONSE_TABLE(TGadgetManager);
  142. };
  143.  
  144.  
  145. //
  146. // class TGadgetManagerPlaceHolder
  147. // ~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
  148. class TGadgetManagerPlaceHolder : public TLayoutWindow {
  149.   public:
  150.     TGadgetManagerPlaceHolder(TWindow* parent);
  151.    ~TGadgetManagerPlaceHolder();
  152.  
  153.     void SetupWindow();
  154.     TResult EvCommand(uint id, THandle hWndCtl, uint notifyCode);
  155.     void    EvCommandEnable(TCommandEnabler& ce);
  156.     bool    EvEraseBkgnd(HDC);
  157.  
  158.     void CreateGadgetManager();
  159.     void DeleteGadgetManager();
  160.  
  161.   private:
  162.     TGadgetManager* Manager;
  163.  
  164.   DECLARE_RESPONSE_TABLE(TGadgetManagerPlaceHolder);
  165. };
  166.  
  167.  
  168. //
  169. // class TBExpertWindow
  170. // ~~~~~ ~~~~~~~~~~~~~
  171. class TTBExpertWindow : public TLayoutWindow {
  172.   public:
  173.     TTBExpertWindow();
  174.    ~TTBExpertWindow();
  175.  
  176.     void SetupWindow();
  177.     void CleanupWindow();
  178.  
  179.     // handle dragging
  180.     //
  181.     void EvLButtonUp(uint modKeys, TPoint& point);
  182.     void EvMouseMove(uint modKeys, TPoint& point);
  183.     void LvnBeginDrag(TListWindow*, TLwNotify& notify);
  184.     void LvnKnownBeginDrag(TLwNotify& notify);
  185.     void LvnDynamicBeginDrag(TLwNotify& notify);
  186.  
  187.     TStatusManager* GetStatusManager();
  188.  
  189.   private:
  190.     void SetupKnownListWindow();
  191.     void SetDynamicDir(const char* dir);
  192.     void GadgetDropped(TListWindow* window, char* gadgetName, int item);
  193.     TResult EvDoneModifyingGadget(TParam1, TParam2);
  194.  
  195.     TListWindow*    KnownListWindow;
  196.     TImageList*     KnownImageList;
  197.     TListWindow*    DynamicListWindow;
  198.     TImageList*     DynamicImageList;
  199.     TStatusManager* StatusManager;
  200.     TGadgetManagerPlaceHolder* GadgetManagerHolder;
  201.  
  202.     // data members used for dragging
  203.     //
  204.     TImageList*     DragImage;
  205.     TRect           DragOffset;
  206.     TListWindow*    DragListWindow;
  207.     int             DragItem;
  208.  
  209.   DECLARE_RESPONSE_TABLE(TTBExpertWindow);
  210. };
  211.  
  212.  
  213. //
  214. // class TGadgetFactory
  215. // ~~~~~ ~~~~~~~~~~~~~~
  216. class TGadgetFactory {
  217.   public:
  218.     enum TGadgetType {
  219.       Separator, Mode, Time, Text, Button
  220.     };
  221.  
  222.     // Various constructors
  223.     //
  224.     TGadgetFactory(int id, TGadget::TBorderStyle); // time gadget
  225.     TGadgetFactory(int id, TGadget::TBorderStyle, int data);
  226.     TGadgetFactory(int id, TGadget::TBorderStyle, int key, const char* text);
  227.     TGadgetFactory(int id, TGadget::TBorderStyle, TTextGadget::TAlign, uint, const char*);
  228.     TGadgetFactory(int id, TGadget::TBorderStyle, TButtonGadget::TType,
  229.                    TButtonGadget::TState, const char*);
  230.  
  231.    ~TGadgetFactory();
  232.  
  233.     // Accessors
  234.     //
  235.     int  GetId();
  236.     void SetId(int id);
  237.  
  238.     const char* GetResId();
  239.     void SetResId(const char* resId);
  240.  
  241.     int  GetBorderStyle();
  242.     void SetBorderStyle(int style);
  243.  
  244.     // Text
  245.     //
  246.     int  GetAlign();
  247.     void SetAlign(int);
  248.  
  249.     uint GetNumChars();
  250.     void SetNumChars(uint numChars);
  251.  
  252.     const char* GetGadgetText();
  253.     void SetGadgetText(const char* text);
  254.  
  255.     // Mode
  256.     //
  257.     int  GetKey();
  258.     void SetKey(int key);
  259.  
  260.     // Button
  261.     //
  262.     int  GetButtonType();
  263.     void SetButtonType(int type);
  264.  
  265.     int  GetButtonState();
  266.     void SetButtonState(int state);
  267.  
  268.     // Generating code
  269.     //
  270.     TGadget* CreateGadget(int index);
  271.     void GenerateCode(ofstream& f);
  272.     void GenerateDefine(ofstream& f);
  273.  
  274.     TGadgetType GetType();
  275.  
  276.   private:
  277.     void Init(int id, TGadget::TBorderStyle, const char* resId);
  278.     void GenerateProperId(ofstream& f);
  279.  
  280.     TGadgetType Type;
  281.  
  282.     // TGadget
  283.     //
  284.     int                   Id;
  285.     char*                 ResId;
  286.     TGadget::TBorderStyle BorderStyle;
  287.  
  288.     // Separator
  289.     //
  290.     int Width;
  291.  
  292.     // Text
  293.     //
  294.     TTextGadget::TAlign  Align;
  295.     uint                 NumChars;
  296.     char*                GadgetText;
  297.  
  298.     // Mode
  299.     //
  300.     int Key;
  301.  
  302.     // Button
  303.     //
  304.     TButtonGadget::TType  ButtonType;
  305.     TButtonGadget::TState ButtonState;
  306.     char*                 PathToBmp;
  307. };
  308.  
  309. //----------------------------------------------------------------------------
  310. // Inline implementations
  311. //
  312. inline TStatusManager*
  313. TTBExpertWindow::GetStatusManager()
  314. {
  315.   return StatusManager;
  316. }
  317.  
  318. inline TGadgetFactory::TGadgetType
  319. TGadgetFactory::GetType()
  320. {
  321.   return Type;
  322. }
  323.  
  324. inline int
  325. TGadgetFactory::GetId()
  326. {
  327.   return Id;
  328. }
  329.  
  330. inline const char*
  331. TGadgetFactory::GetResId()
  332. {
  333.   return ResId;
  334. }
  335.  
  336. inline int
  337. TGadgetFactory::GetBorderStyle()
  338. {
  339.   return (int)BorderStyle;
  340. }
  341.  
  342. // Text
  343. //
  344. inline int
  345. TGadgetFactory::GetAlign()
  346. {
  347.   return (int)Align;
  348. }
  349.  
  350. inline uint
  351. TGadgetFactory::GetNumChars()
  352. {
  353.   return NumChars;
  354. }
  355.  
  356. inline const char*
  357. TGadgetFactory::GetGadgetText()
  358. {
  359.   return GadgetText;
  360. }
  361.  
  362. // Mode
  363. //
  364. inline int
  365. TGadgetFactory::GetKey()
  366. {
  367.   return Key;
  368. }
  369.  
  370. // Button
  371. //
  372. inline int
  373. TGadgetFactory::GetButtonType()
  374. {
  375.   return (int)ButtonType;
  376. }
  377.  
  378. inline int
  379. TGadgetFactory::GetButtonState()
  380. {
  381.   return (int)ButtonState;
  382. }
  383.  
  384.  
  385. //----------------------------------------------------------------------------
  386. // Globals
  387. //
  388. extern TGadgetFactory** GadgetFactories;
  389. extern int CountOfGadgetFactories;
  390.  
  391. const int MaxGadgetFactories = 100;
  392. const int DummyGadgetIdBase = 400;
  393. const int KnownListWindowId = 101;
  394. const int DynamicListWindowId = 102;
  395.  
  396. const int WUM_DONEMODIFYINGGADGET = WM_USER + 0x875;
  397.  
  398. extern char OriginalDir[MAXPATH];
  399. extern char CurrentDir[MAXPATH];
  400.  
  401. extern bool Generate;
  402.  
  403. struct TGeneratedNames {
  404.   char* FrameInstance;
  405.   char* ControlBarInstance;
  406.  
  407.   TGeneratedNames();
  408.  ~TGeneratedNames();
  409. };
  410.  
  411. extern TGeneratedNames Names;
  412.  
  413. #endif
  414.  
  415.  
  416.